package cn.wolfcode.mapper;

import cn.wolfcode.domain.Employee;
import cn.wolfcode.qo.QueryObject;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EmployeeMapper {
    /**
     * 根据员工id删除员工信息
     * @param id
     */
    void deleteById(Long id);

    /**
     * 插入一条员工信息
     * @param employee
     */
    void insert(Employee employee);

    /**
     * 根据id查询一条员工信息
     * @param id
     * @return  返回员工对象
     */
    Employee selectById(Long id);

    /**
     * 查询所有员工信息
     * @return  返回list集合
     */
    List<Employee> selectAll();

    /**
     * 根据id修改一条员工信息
     * @param employee
     */
    void updateById(Employee employee);

    /**
     *查询满足条件的总条数
     * @param qo
     * @return  返回int类型
     */
/*    int queryForCount(QueryObject qo);*/

    /**
     * 查询满足条件的当前页的数据
     * @param qo
     * @return  返回员工对象
     */
    List<Employee> queryForList(QueryObject qo);

    void insertRelation(@Param("eid") Long eid, @Param("rid") Long rid);

    /**
     * 循环插入关系数据
     * @param id
     * @param ids
     */
    void insertBatchRelation(@Param("id") Long id, @Param("ids") Long[] ids);

    /**
     * 根据id删除中间表的关系
     * @param id
     */
    void deleteRelation(Long id);

    /**
     * 根据用户名和密码来判断是否存在该员工
     * @param username
     * @param password
     * @return
     */
    Employee selectByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

    /**
     * 根据id修改密码
     * @param id
     * @param newPassword
     */
    void setNewPassword(@Param("id") Long id, @Param("newPassword") String newPassword);

    /**
     * 根据id删除中间表关系，使用循环标签
     * @param ids
     */
    void batchDelete(@Param("ids") Long[] ids);

    /**
     * 根据id删除员工对象，使用循环标签
     * @param ids
     */
    void deleteBatchRelation(@Param("ids") Long[] ids);

    Employee checkName(String name);

    void updateByStatus(@Param("id") Long id, @Param("status") boolean status);

    List<Employee> selectByRoleSn(String[] sns);
}